struct AppParameters
{
    void Init(const string &filename)
    {
        ParameterFile file(filename);

        game = file.GetRequiredString("game");
        recording = file.GetBoolean("recording");
        exportingMovie = file.GetBoolean("exportingMovie");
        watchingReplays = file.GetBoolean("watchingReplays");
        learningModel = file.GetBoolean("learningModel");
        learningNeighborhoods = file.GetBoolean("learningNeighborhoods");
        learningValueFn = file.GetBoolean("learningValueFn");
        learningOnline = file.GetBoolean("learningOnline");
        useFourDirectionActionSpace = file.GetBoolean("useFourDirectionActionSpace");
        testingModel = file.GetBoolean("testingModel");
        evaluatingModel = file.GetBoolean("evaluatingModel");
        useAI = file.GetBoolean("useAI");

        onlineLearningEpisodes = file.GetInteger("onlineLearningEpisodes");
        onlineGameAgent        = file.GetRequiredString("onlineGameAgent");
        
        framesToRecord = file.GetUnsignedInteger("framesToRecord");

        framesPerSecond = file.GetInteger("framesPerSecond");
    }

    string game;

    bool recording;
    bool exportingMovie;
    bool watchingReplays;
    bool learningModel;
    bool learningNeighborhoods;

    // Learn a value function from replays using saved replays and a trained model
    bool learningValueFn;

    // Learn a value function by interacting with the game
    bool learningOnline;

    // Use 4 directions for the action space (used in games that allow 2D motion)
    bool useFourDirectionActionSpace;

    // The number of episodes for which the online learning algorithm will be run.
    int onlineLearningEpisodes;

    string onlineGameAgent;

    // Show the difference between the predicted and actual frames using a trained model
    bool testingModel;

    // Evaluate a trained model by computing a confusion matrix
    bool evaluatingModel;
    bool useAI;

    UINT framesToRecord;

    int framesPerSecond;
};
